﻿/*
题目: 比较版本号

给你两个 版本号字符串 version1 和 version2 ，请你比较它们。版本号由被点 '.' 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。

比较版本号时，请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少，则将缺失的修订号视为 0。

返回规则如下：

如果 version1 < version2 返回 -1，
如果 version1 > version2 返回 1，
除此之外返回 0。

https://leetcode.cn/problems/compare-version-numbers/
*/

#include <iostream>
#include <random>
#include <string>
#include <vector>
#include <list>
#include "TreeNode.hpp"
#include "ListNode.hpp"
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <functional>

using namespace std;

class Solution {
public:
#define SEP "."

    int compareVersion(string version1, string version2) {
        size_t beg1 = 0, beg2 = 0;
        size_t end1 = 0, end2 = 0;

        while (beg1 < version1.size() || beg2 < version2.size()) {
            int e1 = 0, e2 = 0;

            if (beg1 < version1.size()) {
                end1 = version1.find(SEP, beg1);
                if (end1 == std::string::npos)  end1 = version1.size();
                e1 = stoi(version1.substr(beg1, end1 - beg1));
            }
            if (beg2 < version2.size()) {
                end2 = version2.find(SEP, beg2);
                if (end2 == std::string::npos)  end2 = version2.size();
                e2 = stoi(version2.substr(beg2, end2 - beg2));
            }

            if (e1 != e2) {
                return e1 < e2 ? -1 : 1;
            }
            beg1 = end1 + 1;
            beg2 = end2 + 1;
        }

        return 0;
    }
};
